package com.posti.ciudaddelbache.web.dto;

import java.util.LinkedList;
import java.util.List;

import com.posti.core.geocoding.GeocodingLocation;
import com.posti.core.geocoding.GeocodingResult;

public class GeocodingResultDTO {
  private boolean undeterminedLocation;
  private boolean uniquelyDeterminedLocation;
  private List<GeocodingLocationDTO> locations;

  //TODO: Evaluar la posibilidad de mantener tracking de cambios de forma tal de minimizar las actualizaciones en la sincronizacion.
  //      Objeto syncronizer + commands?
  //TODO: Evaluar la posibilidad de hacer algo generico cuando se haga el manejo por dynamic proxies
  //TODO: Evaluar la posibilidad de desacoplar la logica de transformacion de objeto de negocio a dto,
  //      para permitir mas de un escenario con mismo dto y objeto de negocio.
  public GeocodingResultDTO(GeocodingResult geocodingResult) {
    undeterminedLocation = geocodingResult.isUndeterminedLocation();
    uniquelyDeterminedLocation = geocodingResult.isUniquelyDeterminedLocation();
    locations = this.transformLocations(geocodingResult.getLocations());
  }

  private List<GeocodingLocationDTO> transformLocations(List<GeocodingLocation> locations) {
    List<GeocodingLocationDTO> ret = new LinkedList<GeocodingLocationDTO>();
    for (GeocodingLocation location : locations) {
      ret.add(new GeocodingLocationDTO(location));
    }
    return ret;
  }

  public boolean isUndeterminedLocation() {
    return undeterminedLocation;
  }

  public boolean isUniquelyDeterminedLocation() {
    return uniquelyDeterminedLocation;
  }

  public List<GeocodingLocationDTO> getLocations() {
    return locations;
  }


}
